"""
任务:
需要的字段
英雄的title
技能
皮肤

保存到json格式文件里面去
流程
1.抓包确认url
2.发送请求
3.对响应进行清洗
4.保存数据
"""

import requests
import jsonpath
import json
# 1.抓包确认url
url="https://game.gtimg.cn/images/lol/act/img/js/hero/21.js?ts=2747455"


# 构建请求头
headers={
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36"
}

# 发送请求
response=requests.get(url=url,headers=headers)

# print(response.content.decode())
# 注意打印出来的中文是进行unicode编码的数据   不影响最终的数据保存  保存成功依旧是中文
# 所以执行以下操作    将我们响应内容里的进行unicode编码的中文编码
# data=response.content.decode('unicode-escape', 'ignore')
# 注意点 报了json.decoder.JSONDecodeError: Invalid control character at: line 1 column 869 (char 868) 这种错误 表示 原本的像json格式的数据发生变化 不符合json数据的构造条件 就会报错
# 因此要换数据返回方式  用response.text
data=response.text
# 数据的清洗
jsondata=json.loads(data)

# 通过jsonpath语法进行title的提取
title=jsonpath.jsonpath(jsondata,"$..title")[0]
# 在匹配name时出现了匹配到名字加技能加皮肤的情况  导致数据匹配不正确
name=jsonpath.jsonpath(jsondata,"$..hero.name")[0]
# 要进行数据精确提取
print(title)
print(name)
title_=title+name

# 提取skins下的所有皮肤 加上 [*]
skins=jsonpath.jsonpath(jsondata,"$..skins[*].name")[1:-1]

# print(skins)
# 获取技能
spells=jsonpath.jsonpath(jsondata,"$..spells[*].name")
print(spells)


with open(f"{title_}.json","w",encoding="utf-8")as f:
    dictdata={
        "title":title_,
        "skins":skins,
        "spells":spells
    }
    diledata=json.dumps(dictdata,ensure_ascii=False,indent=3)
    f.write(diledata)
